home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / emacs.lha / emacs-19.16 / lisp / ledit.el < prev    next >
Lisp/Scheme  |  1993-03-22  |  5KB  |  155 lines

  1. ;;; ledit.el --- Emacs side of ledit interface
  2.  
  3. ;; Copyright (C) 1985 Free Software Foundation, Inc.
  4.  
  5. ;; Maintainer: FSF
  6. ;; Keyord: languages
  7.  
  8. ;; This file is part of GNU Emacs.
  9.  
  10. ;; GNU Emacs is free software; you can redistribute it and/or modify
  11. ;; it under the terms of the GNU General Public License as published by
  12. ;; the Free Software Foundation; either version 2, or (at your option)
  13. ;; any later version.
  14.  
  15. ;; GNU Emacs is distributed in the hope that it will be useful,
  16. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18. ;; GNU General Public License for more details.
  19.  
  20. ;; You should have received a copy of the GNU General Public License
  21. ;; along with GNU Emacs; see the file COPYING.  If not, write to
  22. ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  23.  
  24. ;;; Commentary:
  25.  
  26. ;; This is a major mode for editing Liszt.  See etc/LEDIT for details.
  27.  
  28. ;;; Code:
  29.  
  30. ;;; To do:
  31. ;;; o lisp -> emacs side of things (grind-definition and find-definition)
  32.  
  33. (defvar ledit-mode-map nil)
  34.  
  35. (defconst ledit-zap-file (concat "/tmp/" (user-login-name) ".l1")
  36.   "File name for data sent to Lisp by Ledit.")
  37. (defconst ledit-read-file (concat "/tmp/" (user-login-name) ".l2")
  38.   "File name for data sent to Ledit by Lisp.")
  39. (defconst ledit-compile-file 
  40.   (concat "/tmp/" (user-login-name) ".l4")
  41.   "File name for data sent to Lisp compiler by Ledit.")
  42. (defconst ledit-buffer "*LEDIT*"
  43.   "Name of buffer in which Ledit accumulates data to send to Lisp.")
  44.  
  45. ;;;###autoload
  46. (defconst ledit-save-files t "\
  47. *Non-nil means Ledit should save files before transferring to Lisp.")
  48. ;;;###autoload
  49. (defconst ledit-go-to-lisp-string "%?lisp" "\
  50. *Shell commands to execute to resume Lisp job.")
  51. ;;;###autoload
  52. (defconst ledit-go-to-liszt-string "%?liszt" "\
  53. *Shell commands to execute to resume Lisp compiler job.")
  54.  
  55. (defun ledit-save-defun ()
  56.   "Save the current defun in the ledit buffer"
  57.   (interactive)
  58.   (save-excursion
  59.    (end-of-defun)
  60.    (let ((end (point)))
  61.      (beginning-of-defun)
  62.      (append-to-buffer ledit-buffer (point) end))
  63.    (message "Current defun saved for Lisp")))
  64.  
  65. (defun ledit-save-region (beg end)
  66.   "Save the current region in the ledit buffer"
  67.   (interactive "r")
  68.   (append-to-buffer ledit-buffer beg end)
  69.   (message "Region saved for Lisp"))
  70.  
  71. (defun ledit-zap-defun-to-lisp ()
  72.   "Carry the current defun to Lisp."
  73.   (interactive)
  74.   (ledit-save-defun)
  75.   (ledit-go-to-lisp))
  76.  
  77. (defun ledit-zap-defun-to-liszt ()
  78.   "Carry the current defun to liszt."
  79.   (interactive)
  80.   (ledit-save-defun)
  81.   (ledit-go-to-liszt))
  82.  
  83. (defun ledit-zap-region-to-lisp (beg end)
  84.   "Carry the current region to Lisp."
  85.   (interactive "r")
  86.   (ledit-save-region beg end)
  87.   (ledit-go-to-lisp))
  88.  
  89. (defun ledit-go-to-lisp ()
  90.   "Suspend Emacs and restart a waiting Lisp job."
  91.   (interactive)
  92.   (if ledit-save-files
  93.       (save-some-buffers))
  94.   (if (get-buffer ledit-buffer)
  95.       (save-excursion
  96.        (set-buffer ledit-buffer)
  97.        (goto-char (point-min))
  98.        (write-region (point-min) (point-max) ledit-zap-file)
  99.        (erase-buffer)))
  100.   (suspend-emacs ledit-go-to-lisp-string)
  101.   (load ledit-read-file t t))
  102.  
  103. (defun ledit-go-to-liszt ()
  104.   "Suspend Emacs and restart a waiting Liszt job."
  105.   (interactive)
  106.   (if ledit-save-files
  107.       (save-some-buffers))
  108.   (if (get-buffer ledit-buffer)
  109.       (save-excursion
  110.        (set-buffer ledit-buffer)
  111.        (goto-char (point-min))
  112.        (insert "(declare (macros t))\n")
  113.        (write-region (point-min) (point-max) ledit-compile-file)
  114.        (erase-buffer)))
  115.   (suspend-emacs ledit-go-to-liszt-string)
  116.   (load ledit-read-file t t))
  117.  
  118. (defun ledit-setup ()
  119.   "Set up key bindings for the Lisp/Emacs interface."
  120.   (if (not ledit-mode-map)
  121.       (progn (setq ledit-mode-map (nconc (make-sparse-keymap) 
  122.                      shared-lisp-mode-map))))
  123.   (define-key ledit-mode-map "\e\^d" 'ledit-save-defun)
  124.   (define-key ledit-mode-map "\e\^r" 'ledit-save-region)
  125.   (define-key ledit-mode-map "\^xz" 'ledit-go-to-lisp)
  126.   (define-key ledit-mode-map "\e\^c" 'ledit-go-to-liszt))
  127.  
  128. (ledit-setup)
  129.  
  130. ;;;###autoload
  131. (defun ledit-mode ()
  132.   "\\<ledit-mode-map>Major mode for editing text and stuffing it to a Lisp job.
  133. Like Lisp mode, plus these special commands:
  134.   \\[ledit-save-defun]    -- record defun at or after point
  135.        for later transmission to Lisp job.
  136.   \\[ledit-save-region] -- record region for later transmission to Lisp job.
  137.   \\[ledit-go-to-lisp] -- transfer to Lisp job and transmit saved text.
  138.   \\[ledit-go-to-liszt] -- transfer to Liszt (Lisp compiler) job
  139.        and transmit saved text.
  140. \\{ledit-mode-map}
  141. To make Lisp mode automatically change to Ledit mode,
  142. do (setq lisp-mode-hook 'ledit-from-lisp-mode)"
  143.   (interactive)
  144.   (lisp-mode)
  145.   (ledit-from-lisp-mode))
  146.  
  147. ;;;###autoload
  148. (defun ledit-from-lisp-mode ()
  149.   (use-local-map ledit-mode-map)
  150.   (setq mode-name "Ledit")
  151.   (setq major-mode 'ledit-mode)
  152.   (run-hooks 'ledit-mode-hook))
  153.  
  154. ;;; ledit.el ends here
  155.